/**
 * @file   1060.cpp
 * @author Shuang Hu <hsmath@ubuntu>
 * @date   Sat May 29 18:23:46 2021
 * 
 * @brief  PAT advanced:1060
 * 
 * 
 */
#include<iostream>
#include<string>
using namespace std;
int N;
void format(string &a,int &index,bool &big){
    while(a[0]=='0'){a.erase(0,1);}
    while(a[0]=='.'){a.erase(0,1);big=false;}
    while(a[0]=='0'){a.erase(0,1);index--;}
}
void change(string &str,int &index,bool big){
    bool flag=false;
    int dotpos=0;
    string s;
    if(str==""){
	index=0;
	for(int i=0;i<N;i++){
	    str+='0';
	}
	return;
    }
    for(int i=0;i<str.size();i++){
	if(str[i]=='.'){
	    dotpos=i;
	    flag=true;
	    break;
	}
    }
    if(flag==false){
	if(big==true){//case1.1:positive integer
	    index=str.length();
	    if(index>N){
		str.erase(N);
	    }else{
		for(int i=0;i<N-index;i++){
		    char c='0';
		    str+=c;
		}
	    }
	}else{//case1.2:<1,formated
	    int d=str.length();
	    if(str.length()>N){
		str.erase(N);
	    }else{
		for(int i=0;i<N-d;i++){
		    char c='0';
		    str+=c;
		}
	    }
	}
    }else{//case2:still have a 'dot'
	index=dotpos;
	string s="";
	int d=str.length();
	for(int i=0;i<str.length();i++){
	    if(str[i]!='.'){
		s+=str[i];
	    }
	}
	if(s.length()>N){
	    s.erase(N);
	}else{
	    for(int i=0;i<N-d;i++){
		char c='0';
		s+=c;
	    }
	}
	str=s;
    }
}
void print(string s,int index){
    cout<<" 0.";
    cout<<s;
    cout<<"*10^"<<index;
}
int main(){
    string a,b;
    cin>>N>>a>>b;
    int indexa=0;
    int indexb=0;
    bool biga=true;
    bool bigb=true;
    format(a,indexa,biga);
    format(b,indexb,bigb);
    change(a,indexa,biga);
    change(b,indexb,bigb);
    if(indexa==indexb&&a==b){
	cout<<"YES";
	print(a,indexa);
    }else{
	cout<<"NO";
	print(a,indexa);
	print(b,indexb);
    }
    cout<<endl;
}
